package com.azt.api.service;

import com.azt.api.dto.BranchCompanyManage;
import com.azt.api.dto.company.CompanyProviderExt;
import com.azt.api.dto.company.CompanySearchParam;
import com.azt.api.pojo.*;
import com.azt.model.AjaxJson;
import com.azt.model.page.Pagination;
import com.azt.model.page.TPagination;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


public interface CompanyService {

	/**
	 * 分页查
	 * @param pageno
	 * @param pagesize
	 * @param searchMap
	 * @return
	 * @author zdd  2016年7月27日下午2:25:54
	 * @param model
	 */
	Pagination getCompanyPage(int pageno, int pagesize, Map<String, String> searchMap);



	/**
	 * 显示公司详情
	 * @Title: showComDetails
	 * @Description: TODO
	 * @param comid 公司id
	 * @param model
	 * @return
	 * @return: Company
	 * @author: zhoudongdong 2016年9月2日 上午9:45:44
	 */
	Company showComDetails(String comid);



	/**
	 * @description 查询所有的公司
	 * @return
	 * @author 查恒  2016年8月8日上午10:11:04
	 */
	List  findCompanyByQuery(String query,Integer matchCount);

	/**
	 * 编辑公司
	 * @Title: editcompany
	 * @Description: TODO
	 * @param company
	 * @return: void
	 * @author: zhoudongdong 2016年9月2日 上午9:49:35
	 */
	void editcompany(Company company);

	/**
	 * excel查询
	 * @param sql
	 * @return
	 */
	List<Map<String, Object>> queryNeedListBysql(String ind,String ids);


	/**
	 * 审核通过
	 * @Title: changeCompanyState
	 * @Description: TODO
	 * @param comid
	 * @return
	 * @return: AjaxJson
	 * @author: zhoudongdong 2016年9月2日 上午9:51:34
	 */
	AjaxJson changeCompanyState(String comid, Integer operateId);

	/**
	 * 退回修改法
	 * @Title: changeSendBackCompanyState
	 * @Description: TODO
	 * @return
	 * @return: AjaxJson
	 * @author: zhoudongdong 2016年9月5日 上午11:15:28
	 */
	AjaxJson changeSendBackCompanyState(String id,String auditOpinion);
	/*前后台分割线 下面开始是前台业务*/

	void saveOrUpdateCompany(Company company , Integer userId , boolean bo);
	void saveOrUpdateBank(CompanyBank bank , boolean blen , String companyName);
	void saveOrUpdateAsset(CompanyAsset asset);

	Company getCompanyById(Integer id);

	/*根据城市code 和  银行code  获取  列表*/
	List<Map> getOpenBank(String areaCode , String bankCode);

	/*根据城市code 和 银行name  获取 列表*/
	List<Map> findOpenBankByName(String areaCode , String bankName);

	CompanyBank getComapnyBankById(Integer bankId);

	CompanyAsset getAssetById(Integer assetId);

	/**
	 * @Description 根据企业名称获取实体
	 * @param name
	 * @return
	 */
	Company getCompanyByName(String name);

	/**
	 * @Description 根据企业id获取拥有的银行数量
	 * @param companyId
	 * @return
	 */
	Integer getBankCount(Integer companyId);

	/**
	 * 根据关键字搜索企业
	 * @param keyword
	 * @return
	 */
    List<Company> searchCompanyByKeyword(String keyword);

    CompanyInfo getCompanyInfoByCompanyId(Integer companyId);

	/**
	 * 获取顶级公司
	 * */
    Company getTopParentCompany(int companyId);

    /**
	 * 获取公司下面的所有子公司（包括子子...公司）
	 * */
	List<Company> findAllChildCompany(int companyId);

	/**
	 * 判断一个公司是否是另外一个公司的子子...公司
	 * */
    boolean isChildCompany(int parentId, int childId);

    CompanyInfo selectByCompanyIdDetail(int companyId);

    /**
	 * 根据id删除财务信息
	 * @param bankId
	 */
	void delBankInfo(Integer bankId);

	/**
	 * 删除企业资质
	 * @param assetId
	 */
	void delAsset(Integer assetId);


	/** 
	 * @Title: searchBranchCompany 
	 * @Description: 搜索分公司的
	 * @param pageNo
	 * @param pageSize
	 * @param searchMap
	 * @return
	 * @return: Pagination
	 * @author: 查恒 2016年10月11日 下午2:48:13 
	 */
	Pagination searchBranchCompany(int pageNo, int pageSize, Integer companyId,Map<String, String> searchMap);
	
	
	/** 
	 * @Title: selectBranchCompany 
	 * @Description: 分公司查询 不分页
	 * @param companyId
	 * @param branchCompany 查询关键词
	 * @return
	 * @return: List<BranchCompanyManage>
	 * @author: 查恒 2016年10月24日 上午11:25:55 
	 */
	List<BranchCompanyManage> selectBranchCompany(Integer companyId, String branchCompany);
	
	/**
	 * 根据 公司id查名称
	 * Created by 张栋 on 2016/10/12 11:33
	 */
    List<String> getCustommerNamesByIds(List<String> cidlist);



	List<Company> getBranchCompany(Integer companyId);

    Map getOrderCompanyTip(int companyId);



	/** 
	 * @Title: createBranchCompany 
	 * @Description: 创建分公司的方法  传入的参数是主公司的对象
	 * @param company
	 * @return
	 * @return: Company
	 * @author: 查恒 2016年10月19日 下午3:53:21 
	 */
	Company createBranchCompany(Company company,Map<String,Object> parseMap);


	/** 
	 * @Title: saveOrUpdateBranchCompany 
	 * @Description: 创建分公司并给予权限的方法封装
	 * @param company
	 * @param parseMap
	 * @return: void
	 * @author: 查恒 2016年10月19日 下午4:30:22 
	 */
	int saveOrUpdateBranchCompany(Company company, Map<String, Object> parseMap, Integer branchCompanyId);



	/** 
	 * @Title: delBranchCompany 
	 * @Description: 全面删除分公司
	 * @param branchCompanyId
	 * @return: void
	 * @author: 查恒 2016年10月26日 上午11:32:42 
	 */
	void delBranchCompany(Integer branchCompanyId);

    List<CompanyBank> findCompanyBankByCid(int companyId, Integer bankType);

	/**
	 * 获取付款账户信息(优先读取基本户)
	 * */
    CompanyBank getCompanyPayBank(int companyId);


	/**
	 * 修改公司的默认财务信息账号
	 * @param companyId
	 * @param bankId
	 * @throws Exception
	 */
	public void changeDefaultBank(Integer companyId , Integer bankId) throws Exception;



	/** 
	 * @Title: checkBranchCompanyName 
	 * @Description: 验证公司名称
	 * @param branchName
	 * @param company
	 * @return
	 * @return: Boolean
	 * @author: 查恒 2016年11月21日 下午2:53:25 
	 */
	Boolean checkBranchCompanyName(String branchName, Company company,Integer branchCompanyId);
	
	/** 
	 * @Title: getBranchCompanyName 
	 * @Description: 根据当前公司获得页面显示的拼接公司名称
	 * @param company
	 * @return
	 * @return: String
	 * @author: 查恒 2016年11月21日 下午3:06:09 
	 */
	public String getBranchCompanyName(Company company);


	/**
	 * @Title: AllBranchCompany
	 * @Description: ★查询该公司下所有的分公司  参数ID是一级公司获取所有二级和所有三级，是二级获取所有三级。
	 * @param companyId
	 * @return
	 * @return: List<Company>
	 * @author: 查恒 2016年11月21日 下午3:52:10
	 */
	List<Company> allBranchCompany(Integer companyId);



	/** 
	 * @Title: getCentralizePurchaseByCompanyId 
	 * @Description: 查询集采供应商
	 * @param companyId
	 * @return
	 * @return: CentralizePurchase
	 * @author: 查恒 2016年11月30日 上午11:17:02 
	 */
	Boolean getCentralizePurchaseByCompanyId(Integer companyId);


	/**
	 * 修改logo
	 * @param logo
	 * @param companyId
	 */
	void changeLogo(String logo , Integer companyId) throws Exception;


	/**
	 * 根据公司id查询公司下所有管理员
	 * @Title: getAdminIdsByCompanyId
	 * @Description: TODO
	 * @param companyId
	 * @return
	 * @return: String
	 * @author: zhoudongdong 2016年12月9日 上午10:57:50
	 */
	public List<User> getAdminIdsByCompanyId(Integer companyId);
	
	public List<Map<String, String>> selectExportCompany(String companyIds);

	/**
	 * 根据公司id查该公司下的区域公司
	 * Created by 张栋 on 2017/1/18 10:06
	 */
    List<Company> getCompanyByPId(Integer companyId);

	
	/**
	 * 获取companyExt,根据id
	 * Created by 张栋 on 2017/2/23 9:50
	 */
    CompanyExt getCompanyExtById(Integer id);

	/**
	 * 根据 商家id 取  companyExt表
	 * Created by 张栋 on 2017/2/23 9:54
	 */
	CompanyExt getCompanyExtByCustomerid(Integer customerId);

	/**
	 * save ext
	 * Created by 张栋 on 2017/3/3 13:26
	 */
    void saveCompanyExt(CompanyExt ext);

	/**
	 * update ext
	 * Created by 张栋 on 2017/3/3 13:26
	 */
	void updateCompanyExt(CompanyExt ext);

	/**
	 * select 2 用来模糊查询公司
	 * @return
	 */
	Pagination listCompany(Integer pageNo, Integer pageSize, Map params);



	/**
	 * @Title: delCompany
	 * @Description: 删除公司的操作，对公司的名称更新为已删除，removed设为1，旗下的用户全部解绑公司，角色设置注册用户。
	 * @param company
	 * @return: void
	 * @author: 查恒 2017年3月28日 上午9:30:14
	 */
	void delCompany(Company company);

	/**
	 * 根据参数查店铺
	 * Created by 张栋 on 2017/3/27 16:22
	 */
    TPagination<CompanyProviderExt> getSearchProvider(CompanySearchParam param);
}

